﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.SharePoint;

namespace Expertime.Multitude.Intranet.Utils
{
    class UserUtils
    {
        public static String GetSPUSerEmail(SPWeb currentWeb, String login)
        {
            String email = String.Empty;
            try
            {
                SPUser user = currentWeb.SiteUsers[login];
                if (user != null)
                    email = user.Email;
            }
            catch (Exception ex) { LogManager.LogException(ex, string.Format("[UserUtils.GetSPUSerEmail] Erreur lors de la récupération de l'email de l'utilisateur '{0}'.", login)); }
            if (String.IsNullOrEmpty(email))
            {
                try
                {
                    SPGroup group = currentWeb.SiteGroups[login];
                    if (group != null)
                    {
                        foreach (SPUser user in group.Users)
                        {
                            email = String.Format("{0};{1}", email, user.Email);
                        }
                    }
                }
                catch (Exception ex) { LogManager.LogException(ex, string.Format("[UserUtils.GetSPUSerEmail] Erreur lors de la récupération de l'email du groupe '{0}'.", login)); }
            }
            return email;
        }
        public static SPPrincipal GetSPPrincipal(SPWeb currentWeb, String login)
        {
            SPPrincipal principal = null;
            try
            {
                SPUser user = currentWeb.SiteUsers[login];
                if (user != null)
                    principal = user;
            }
            catch (Exception ex) { LogManager.LogException(ex, string.Format("[UserUtils.GetSPPrincipal] Erreur lors de la récupération de l'utilisateur '{0}'.", login)); }
            if (principal == null)
            {
                try
                {
                    SPGroup group = currentWeb.SiteGroups[login];
                    if (group != null)
                        principal = group;
                }
                catch (Exception ex) { LogManager.LogException(ex, string.Format("[UserUtils.GetSPPrincipal] Erreur lors de la récupération du groupe '{0}'.", login)); }
            }
            return principal;
        }

        /// <summary>
        /// Retourne la liste des users du champ donné pour le listItem donné
        /// </summary>
        /// <param name="currentWeb"></param>
        /// <param name="listItem"></param>
        /// <param name="fieldName"></param>
        /// <returns></returns>
        public static List<SPUser> GetSPListItemUsers(SPWeb currentWeb, SPListItem listItem, string fieldName)
        {
            List<SPUser> users = new List<SPUser>();

            if (listItem.Fields.ContainsField(fieldName))
            {
                SPFieldUser field = (SPFieldUser)listItem.Fields.GetFieldByInternalName(fieldName);

                object fieldValue = listItem[field.Id];
                if (fieldValue == null)
                    fieldValue = listItem[fieldName];

                if (fieldValue != null)
                {
                    if (field.AllowMultipleValues)
                    {
                        // On va récupérer le Positioner, pour lui assigner les droits de lecture du site, qui est une collection de users.
                        SPFieldUserValueCollection itemUserCollection = new SPFieldUserValueCollection(currentWeb, fieldValue.ToString());
                        if (itemUserCollection != null)
                        {
                            foreach (SPFieldUserValue item in itemUserCollection)
                                users.Add(item.User);
                        }
                    }
                    else
                    {
                        SPFieldUserValue item = new SPFieldUserValue(currentWeb, fieldValue.ToString());
                        users.Add(item.User);
                    }
                }
                else
                    LogManager.LogDebug("[Method.GetSPListItemUsers]", string.Format("listItem.Fields.ContainsField('{0}') == false", fieldName));
            }
            else
                LogManager.LogDebug("[Method.GetSPListItemUsers]", string.Format("listItem['{0}'] == null", fieldName));

            return users;
        }
    }
}
